using System;
using System.Collections.Generic;
using System.Data;
using System.Configuration;
using System.Web.UI;
using BusinessRules;
using Common;
using DataAccess;
using DevExpress.Web.ASPxGridView;
using System.Linq;


public partial class RegistroPresupuestalListado : Page
{
    #region - Propiedades

    public string StrFprId
    {
        get
        {
            if (ViewState["StrFprId"] != null)
                return ViewState["StrFprId"].ToString();
            return "";
        }
        set { ViewState["StrFprId"] = value; }
    }
    #endregion

    private DataTable FinRegistroDataTable
    {

        get
        {
            DataTable objTable = null;
            if (Cache["FinRegistroDataTable" + Session.SessionID] != null)
                objTable = (DataTable)Cache["FinRegistroDataTable" + Session.SessionID];
            return objTable;
        }

        set
        {
            if (value != null)
            {
                Cache.Insert(FinRegistroDataTable + Session.SessionID, value, null, DateTime.Now.AddMinutes(20), TimeSpan.Zero);
            }
        }
    }

    #region - PageLoad

    protected void Page_Load(object sender, EventArgs e)
    {

        lblMensaje.Visible = false;
        if (!IsPostBack)
        {
            BindDatos();
        }
        else
        {
            if (FinRegistroDataTable != null)
            {
                gidvRegistroPresupuestal.DataSource = FinRegistroDataTable;
                gidvRegistroPresupuestal.DataBind();
            }
        }
    }

    #endregion

    #region - BindDatos

    private void BindDatos()
    {
        try
        {
            Model.DataClassesContratosDataContext contexto = new Model.DataClassesContratosDataContext(ConfigurationManager.AppSettings["Conn"]);
            var datos = from a in contexto.FIN_REGISTRO_PRESUPUESTALs
                        join b in contexto.FIN_ESTADOS_RPs on a.FER_ID equals b.FER_ID
                        join c in contexto.FIN_TIPO_MONEDAs on a.FTM_ID equals c.FTM_ID
                        join e in contexto.FIN_CDPs on a.FCD_ID equals e.FCD_ID
                        select new
                        {
                            a.FRP_ID,
                            a.FRP_NUMERO_REGISTRO_PRESUPUESTAL,
                            a.FRP_FECHA_REGISTRO_PRESUPUESTAL,
                            a.FRP_VALOR_FINAL_ADICION_CONTRATO,
                            a.FRP_TERCERO,
                            a.FCD_ID,
                            a.FTM_ID,
                            b.FER_NOMBRE,
                            c.FTM_NOMBRE_MONEDA,
                            e.FCD_NUMERO_CDP
                        };
            if (datos == null) return;
            gidvRegistroPresupuestal.BeginUpdate();
            gidvRegistroPresupuestal.DataSource = datos;// objProductosComercialesRendimientosData.DefaultView;
            gidvRegistroPresupuestal.DataBind();
            gidvRegistroPresupuestal.EndUpdate();
            FinRegistroDataTable = GetDataView(gidvRegistroPresupuestal);
        }
        catch (Exception ex)
        {
            ex.Message.ToString();
            //throw;
        }

    }

    #endregion

    #region GetDataView
    private DataTable GetDataView(ASPxGridView grid)
    {
        DataTable dt = new DataTable();
        foreach (GridViewColumn col in grid.VisibleColumns)
        {
            GridViewDataColumn dataColumn = col as GridViewDataColumn;
            if (dataColumn == null) continue;
            dt.Columns.Add(dataColumn.FieldName);
        }
        for (int i = 0; i < grid.VisibleRowCount; i++)
        {
            DataRow row = dt.Rows.Add();
            foreach (DataColumn col in dt.Columns)
                row[col.ColumnName] = grid.GetRowValues(i, col.ColumnName);
        }
        return dt;
    }
    #endregion

    #region - ContextItems

    private void crearContextItems()
    {
        Context.Items["StrFprId"] = StrFprId;
    }



    #endregion

    #region Exportar
    protected void btnXlsExport_Click(object sender, EventArgs e)
    {
        gridExport.WriteXlsToResponse();
    }
    protected void btnRtfExport_Click(object sender, EventArgs e)
    {
        gridExport.WriteRtfToResponse();
    }
    protected void btnCsvExport_Click(object sender, EventArgs e)
    {
        gridExport.WriteCsvToResponse();
    }
    
    #endregion

    protected void btnActualizar_Click(object sender, EventArgs e)
    {
        List<object> keyValues = gidvRegistroPresupuestal.GetSelectedFieldValues("FRP_ID");

        try
        {
            foreach (object key in keyValues)
            {
                if (keyValues.Count == 1)
                {
                    StrFprId = key.ToString();
                    crearContextItems();
                    Server.Transfer("RegistroPresupuestal.aspx?SSM_ID=42", true);
                }
                else
                    if (keyValues.Count > 1)
                        msgBox1.alert("Debe Seleccionar un solo Registro para Editar");
            }
            if (keyValues.Count == 0)
                msgBox1.alert("Debe Seleccionar al un Registro para Editar");


        }
        catch (Exception ex)
        {
            ScriptManager.RegisterStartupScript(Page, Page.GetType(), "msg1_error", "alert('" + ex.Message.ToString() + "');", true);
        }
    }

    protected void btnAdicionar_Click(object sender, EventArgs e)
    {
        Server.Transfer("RegistroPresupuestal.aspx?SSM_ID=42", true);
    }
    protected void btnEliminar_Click(object sender, EventArgs e)
    {
        List<object> keyValues = gidvRegistroPresupuestal.GetSelectedFieldValues("FRP_ID");
        try
        {
            foreach (object key in keyValues)
            {
                if (keyValues.Count != 0)
                {
                    StrFprId = key.ToString();

                    Model.DataClassesContratosDataContext contexto = new Model.DataClassesContratosDataContext(ConfigurationManager.AppSettings["Conn"]);
                    var datosZona = from u in contexto.FIN_REGISTRO_PRESUPUESTALs
                                    where u.FRP_ID == Convert.ToDecimal(StrFprId)
                                    select u;

                    //borrar los datos de la zona
                    foreach (var vi in datosZona)
                    {
                        contexto.FIN_REGISTRO_PRESUPUESTALs.DeleteOnSubmit(vi);
                        contexto.SubmitChanges();
                    }

                    
                    BindDatos();
                    msgBox1.alert("Los registros fueron eliminador exitosamente");
                }
                else
                    if (keyValues.Count > 1)
                        msgBox1.alert("Debe Seleccionar al menos un registro para eliminar");
            }
            if (keyValues.Count == 0)
                msgBox1.alert("Debe Seleccionar al menos un Registro");
        }
        catch (Exception ex)
        {
            ScriptManager.RegisterStartupScript(Page, Page.GetType(), "msg1_error", "alert('" + ex.Message.ToString() + "');", true);
        }
    }
}
